// 存放程序的配置信息
package config

import (
	"fmt"
	"github.com/sirupsen/logrus"
	"github.com/spf13/viper"
	"path"
	"runtime"
)

const (
	TimeFormat = "2006-01-02 15:04:05"
)

var (
	Port       string //存储服务启动端口
	JwtSignKey string //存储jwt要加密的secret
	JwtExpTime int64  //token过期时间，单位分钟
	Username   string //存储用户名，全局变量
	Password   string //存储密码，全局变量
)

type ReturnData struct { //因为返回给前端数据的地方太多了，全部都写r.json(http.status.ok,gin.h{})太繁琐了，所以定义一个结构体来返回数据
	Status  int                    `json:"status"`
	Message string                 `json:"message"`
	Data    map[string]interface{} `json:"data"`
}

func NewReturnData() ReturnData { //构造函数，用来通过约定初始化函数，通常以New开头
	returnData := ReturnData{}
	returnData.Status = 200              //默认为http.status.ok
	data := make(map[string]interface{}) //初始化上面ReturnData.Data
	returnData.Data = data
	return returnData
}

func initLogConfig(loglevel string) { // 定义日志级别的函数
	if loglevel == "debug" {
		logrus.SetLevel(logrus.DebugLevel)
	} else {
		logrus.SetLevel(logrus.InfoLevel)
	}
}

func init() {
	logrus.SetFormatter(&logrus.JSONFormatter{
		TimestampFormat: TimeFormat, //日志格式化，添加时间
		CallerPrettyfier: func(f *runtime.Frame) (function string, file string) { //日志打印不显示具体的路径
			fileName := path.Base(f.File)
			return f.Function, fileName
		},
	})
	logrus.SetReportCaller(true)               //打印日志时添加文件和行号
	viper.SetDefault("PORT", ":8080")          //默认配置
	viper.SetDefault("JWT_SIGN_KEY", "zhouhe") //设置默认的JWT加密secret
	viper.SetDefault("LOG_LEVEL", "debug")     //日志默认的级别
	viper.SetDefault("JWT_EXPIRE_TIME", 120)   //默认token过期时间
	viper.SetDefault("USERNAME", "bWFzdGVy")   //默认登录用户，默认值  master
	viper.SetDefault("PASSWORD", "MTIzNDU2")   //默认登陆密码  默认值 123456

	viper.AutomaticEnv() //获取设置的默认变量
	fmt.Printf("开始加载配置程序")
	loglevel := viper.GetString("LOG_LEVEL")       //获取默认的日志级别
	initLogConfig(loglevel)                        //使用initLogConfig函数来判断日志级别
	Port = viper.GetString("Port")                 //获取默认的程序端口
	JwtSignKey = viper.GetString("JWT_SIGN_KEY")   //JWT加密的默认secret赋值给变量JwtSignKey
	JwtExpTime = viper.GetInt64("JWT_EXPIRE_TIME") //JWT默认token过期时间赋值给变量JwtExpTime
	Username = viper.GetString("USERNAME")         //获取默认的登录用户
	Password = viper.GetString("PASSWORD")         //获取默认的登录密码
}
